home *** CD-ROM | disk | FTP | other *** search
/ TPUG - Toronto PET Users Group / TPUG Users Group CD / TPUG Users Group CD.iso / COMAL / A-COMAL Series / (k)aab.d64 / lst.graphs < prev    next >
Text File  |  2007-02-28  |  7KB  |  228 lines

  1. 0010 // DELETE "0:LST.GRAPHS"
  2. 0020 // LIST   "0:LST.GRAPHS"
  3. 0030 
  4. 0040 ╨╥╧├ INIT 
  5. 0050   ╒╙┼ SYSTEM
  6. 0060   ╒╙┼ GRAPHICS
  7. 0070   
  8. 0080   GRAPHICSCREEN(0)
  9. 0090   BORDER(1)
  10. 0100   BACKGROUND(1)
  11. 0110   PENCOLOR(11)
  12. 0120   HIDETURTLE
  13. 0130   VIEWPORT(0,319,0,199)
  14. 0140   MIN'WL:=6; MAX'WL:=150
  15. 0150   MIN'FLUX:=1; MAX'FLUX:=1000000
  16. 0160   MIN'X:=LOG10(MIN'WL); MAX'X:=LOG10(MAX'WL)
  17. 0170   MIN'Y:=LOG10(MIN'FLUX); MAX'Y:=LOG10(MAX'FLUX)
  18. 0180   WINDOW(MIN'X,MAX'X,MIN'Y,MAX'Y)
  19. 0190   DRAW'BOX(╘╥╒┼,╘╥╒┼,╘╥╒┼,╘╥╒┼)
  20. 0200 ┼╬─╨╥╧├ INIT
  21. 0210 
  22. 0220 ╨╥╧├ DRAW'BOX(BOTTOM,LEFT'SIDE,RIGHT'SIDE,TOP) ├╠╧╙┼─
  23. 0230   ╔═╨╧╥╘ AXIS,LOG'AXIS,MOVETO,DRAWTO,INQ
  24. 0240   XMIN:=INQ(23); XMAX:=INQ(24); YMIN:=INQ(25); YMAX:=INQ(26)
  25. 0250   ╔╞ BOTTOM=1 ╘╚┼╬
  26. 0260     LOG'AXIS(XMIN,YMIN,XMAX,YMIN,XMIN,XMAX)
  27. 0270   ┼╠╔╞ BOTTOM=0 ╘╚┼╬
  28. 0280     AXIS(XMIN,YMIN,XMAX,YMIN,XMIN,XMAX)
  29. 0290   ┼╠╙┼ 
  30. 0300     MOVETO(XMIN,YMIN)
  31. 0310     DRAWTO(XMAX,YMIN)
  32. 0320   ┼╬─╔╞ 
  33. 0330   ╔╞ LEFT'SIDE=0 ╘╚┼╬
  34. 0340     AXIS(XMIN,YMIN,XMIN,YMAX,YMIN,YMAX)
  35. 0350   ┼╠╔╞ LEFT'SIDE=1 ╘╚┼╬
  36. 0360     LOG'AXIS(XMIN,YMIN,XMIN,YMAX,YMIN,YMAX)
  37. 0370   ┼╠╙┼ 
  38. 0380     MOVETO(XMIN,YMIN)
  39. 0390     DRAWTO(XMIN,YMAX)
  40. 0400   ┼╬─╔╞ 
  41. 0410   ╔╞ RIGHT'SIDE=0 ╘╚┼╬
  42. 0420     AXIS(XMAX,YMIN,XMAX,YMAX,YMIN,YMAX)
  43. 0430   ┼╠╔╞ RIGHT'SIDE=1 ╘╚┼╬
  44. 0440     LOG'AXIS(XMAX,YMIN,XMAX,YMAX,YMIN,YMAX)
  45. 0450   ┼╠╙┼ 
  46. 0460     MOVETO(XMAX,YMIN)
  47. 0470     DRAWTO(XMAX,YMAX)
  48. 0480   ┼╬─╔╞ 
  49. 0490   ╔╞ TOP=0 ╘╚┼╬
  50. 0500     AXIS(XMIN,YMAX,XMAX,YMAX,XMIN,XMAX)
  51. 0510   ┼╠╔╞ TOP=1 ╘╚┼╬
  52. 0520     LOG'AXIS(XMIN,YMAX,XMAX,YMAX,XMIN,XMAX)
  53. 0530   ┼╠╙┼ 
  54. 0540     MOVETO(XMIN,YMAX)
  55. 0550     DRAWTO(XMAX,YMAX)
  56. 0560   ┼╬─╔╞ 
  57. 0570 ┼╬─╨╥╧├ DRAW'BOX
  58. 0580 
  59. 0590 ╞╒╬├ LOG10(NUM) ├╠╧╙┼─
  60. 0600   ╥┼╘╒╥╬ ╠╧╟(NUM)/╠╧╟(10)
  61. 0610 ┼╬─╞╒╬├ LOG10
  62. 0620 
  63. 0630 ╞╒╬├ MAX(A,B) ├╠╧╙┼─
  64. 0640   ╔╞ A>B ╘╚┼╬
  65. 0650     ╥┼╘╒╥╬ A
  66. 0660   ┼╠╙┼ 
  67. 0670     ╥┼╘╒╥╬ B
  68. 0680   ┼╬─╔╞ 
  69. 0690 ┼╬─╞╒╬├ MAX
  70. 0700 
  71. 0710 ╞╒╬├ MIN(A,B) ├╠╧╙┼─
  72. 0720   ╔╞ A<B ╘╚┼╬
  73. 0730     ╥┼╘╒╥╬ A
  74. 0740   ┼╠╙┼ 
  75. 0750     ╥┼╘╒╥╬ B
  76. 0760   ┼╬─╔╞ 
  77. 0770 ┼╬─╞╒╬├ MIN
  78. 0780 
  79. 0790 ╨╥╧├ AXIS(START'X,START'Y,STOP'X,STOP'Y,START'VL,STOP'VL) ├╠╧╙┼─
  80. 0800   ╔═╨╧╥╘ MOVETO,DRAWTO,INQ,TICKS,BASE'CONV,PLOTTEXT,MIN
  81. 0810   ─╔═ OUT$ ╧╞ 10
  82. 0820   MOVETO(START'X,START'Y)
  83. 0830   DRAWTO(STOP'X,STOP'Y)
  84. 0840   DX:=STOP'X-START'X; DY:=STOP'Y-START'Y
  85. 0850   RANGE:=STOP'VL-START'VL
  86. 0860   X'RATIO:=DX/RANGE; Y'RATIO:=DY/RANGE
  87. 0870   XMIN:=INQ(23); XMAX:=INQ(24); YMIN:=INQ(25); YMAX:=INQ(26)
  88. 0880   X'SCALE:=(INQ(20)-INQ(19))/(XMAX-XMIN)
  89. 0890   Y'SCALE:=(INQ(22)-INQ(21))/(YMAX-YMIN)
  90. 0900   X'LN:=DX*X'SCALE; Y'LN:=DY*Y'SCALE
  91. 0910   LENGTH:=╙╤╥(X'LN^2+Y'LN^2)
  92. 0920   ALPHA:=X'LN/LENGTH; BETA:=Y'LN/LENGTH
  93. 0930   DELTA:=(STOP'VL-START'VL)*75/LENGTH
  94. 0940   TICKS(START'VL,STOP'VL,DELTA,I'START,I'STOP,NUMBER'SIZE)
  95. 0950   ╔╞ (START'X-XMIN<XMAX-STOP'X) ╧╥ (START'Y-YMIN>YMAX-STOP'Y) ╘╚┼╬
  96. 0960     SIDE#:=+1
  97. 0970   ┼╠╙┼ 
  98. 0980     SIDE#:=-1
  99. 0990   ┼╬─╔╞ 
  100. 1000   ╞╧╥ I:=I'START ╘╧ I'STOP ╙╘┼╨ ╙╟╬(LENGTH) ─╧
  101. 1010     VALUE:=I*DELTA
  102. 1020     X:=START'X+(VALUE-START'VL)*X'RATIO
  103. 1030     Y:=START'Y+(VALUE-START'VL)*Y'RATIO
  104. 1040     MOVETO(X,Y)
  105. 1050     X:=X+SIDE#*(8/X'SCALE)*BETA
  106. 1060     Y:=Y-SIDE#*(8/Y'SCALE)*ALPHA
  107. 1070     DRAWTO(X,Y)
  108. 1080     BASE'CONV(VALUE,10,OUT$)
  109. 1090     X:=X-(4/X'SCALE)*NUMBER'SIZE*(1-SIDE#)*BETA
  110. 1100     ╔╞ DY<>0 ╘╚┼╬ X:=X-(8/X'SCALE)*ALPHA/BETA
  111. 1110     Y:=Y-(4/Y'SCALE)*(SIDE#+1)*ALPHA
  112. 1120     PLOTTEXT(X,Y,OUT$(1:MIN(NUMBER'SIZE,╠┼╬(OUT$))))
  113. 1130   ┼╬─╞╧╥ I
  114. 1140 ┼╬─╨╥╧├ AXIS
  115. 1150 
  116. 1160 ╨╥╧├ BASE'CONV(DCML,BASE,╥┼╞ OUTPT$) ├╠╧╙┼─
  117. 1170   ╔═╨╧╥╘ MAX
  118. 1180   ─╔═ DIGIT$ ╧╞ 16
  119. 1190   DIGIT$:="0123456789ABCDEF"
  120. 1200   ╔╞ DCML ╘╚┼╬
  121. 1210     ╔╞ DCML>0 ╘╚┼╬
  122. 1220       OUTPT$:=""
  123. 1230     ┼╠╙┼ 
  124. 1240       OUTPT$:="-"
  125. 1250     ┼╬─╔╞ 
  126. 1260     REMNDR:=┴┬╙(DCML)
  127. 1270     LB#:=╔╬╘(╠╧╟(REMNDR)/╠╧╟(BASE))
  128. 1280     DVSR:=MAX(BASE^LB#,.1)
  129. 1290     ╫╚╔╠┼ DVSR>=1 ─╧
  130. 1300       DIGT:=╔╬╘(REMNDR/DVSR+1E-05)
  131. 1310       OUTPT$:=OUTPT$+DIGIT$(DIGT+1)
  132. 1320       REMNDR:=REMNDR-DVSR*╔╬╘(DIGT)
  133. 1330       DVSR:=DVSR/BASE
  134. 1340     ┼╬─╫╚╔╠┼ 
  135. 1350     ╔╞ REMNDR ╘╚┼╬ OUTPT$:=OUTPT$+"."
  136. 1360     ╫╚╔╠┼ REMNDR>0 ┴╬─ DVSR>0 ─╧
  137. 1370       DIGT:=╔╬╘(REMNDR/DVSR+1E-05)
  138. 1380       OUTPT$:=OUTPT$+DIGIT$(DIGT+1)
  139. 1390       REMNDR:=REMNDR-DVSR*╔╬╘(DIGT)
  140. 1400       DVSR:=DVSR/BASE
  141. 1410     ┼╬─╫╚╔╠┼ 
  142. 1420   ┼╠╙┼ 
  143. 1430     OUTPT$:=DIGIT$(1)
  144. 1440   ┼╬─╔╞ 
  145. 1450 ┼╬─╨╥╧├ BASE'CONV
  146. 1460 
  147. 1470 ╨╥╧├ TICKS(LFT'LO,RGHT'HI,╥┼╞ INTVL,╥┼╞ ISTART,╥┼╞ ISTOP,╥┼╞ N'S) ├╠╧╙┼─
  148. 1480   ╔═╨╧╥╘ LOG10,MAX
  149. 1490   INTVL'EXPNT:=LOG10(INTVL)
  150. 1500   INTVL'ORDER'MAGN:=╔╬╘(INTVL'EXPNT)
  151. 1510   INTVL'MANTISSA:=INTVL*10^(-INTVL'ORDER'MAGN)
  152. 1520   ╔╞ INTVL'MANTISSA<1.5 ╘╚┼╬
  153. 1530     INTVL'MANTISSA:=1
  154. 1540   ┼╠╔╞ INTVL'MANTISSA<3 ╘╚┼╬
  155. 1550     INTVL'MANTISSA:=2
  156. 1560   ┼╠╔╞ INTVL'MANTISSA<8 ╘╚┼╬
  157. 1570     INTVL'MANTISSA:=5
  158. 1580   ┼╠╙┼ 
  159. 1590     INTVL'MANTISSA:=10
  160. 1600   ┼╬─╔╞ 
  161. 1610   INTVL:=INTVL'MANTISSA*10^INTVL'ORDER'MAGN
  162. 1620   ISTART:=╔╬╘(LFT'LO/INTVL); ISTOP:=╔╬╘(RGHT'HI/INTVL)
  163. 1630   ╔╞ ISTOP>ISTART ╘╚┼╬
  164. 1640     ╔╞ ISTART*INTVL<LFT'LO ╘╚┼╬ ISTART:=ISTART+1
  165. 1650     ╔╞ ISTOP*INTVL>RGHT'HI ╘╚┼╬ ISTOP:=ISTOP-1
  166. 1660   ┼╠╙┼ 
  167. 1670     ╔╞ ISTOP*INTVL<RGHT'HI ╘╚┼╬ ISTOP:=ISTOP+1
  168. 1680   ┼╬─╔╞ 
  169. 1690   NUM'DIGITS'GT'0:=┴┬╙(╔╬╘(LOG10(MAX(┴┬╙(RGHT'HI),┴┬╙(LFT'LO)))))+1
  170. 1700   INTVL'NUM'DIGITS:=┴┬╙(INTVL'ORDER'MAGN)
  171. 1710   ╔╞ INTVL'ORDER'MAGN<0 ╘╚┼╬
  172. 1720     ╔╞ INTVL'NUM'DIGITS>0 ╘╚┼╬
  173. 1730       N'S:=NUM'DIGITS'GT'0+INTVL'NUM'DIGITS+1
  174. 1740     ┼╠╙┼ 
  175. 1750       N'S:=NUM'DIGITS'GT'0
  176. 1760     ┼╬─╔╞ 
  177. 1770   ┼╠╙┼ 
  178. 1780     N'S:=NUM'DIGITS'GT'0
  179. 1790   ┼╬─╔╞ 
  180. 1800 ┼╬─╨╥╧├ TICKS
  181. 1810 
  182. 1820 ╨╥╧├ LOG'AXIS(START'X,START'Y,STOP'X,STOP'Y,START'VL,STOP'VL) ├╠╧╙┼─
  183. 1830   ╔═╨╧╥╘ MOVETO,DRAWTO,INQ,TICKS,BASE'CONV,PLOTTEXT,MIN,LOG10
  184. 1840   ─╔═ OUT$ ╧╞ 10
  185. 1850   MOVETO(START'X,START'Y)
  186. 1860   DRAWTO(STOP'X,STOP'Y)
  187. 1870   DX:=STOP'X-START'X; DY:=STOP'Y-START'Y
  188. 1880   RANGE:=STOP'VL-START'VL
  189. 1890   X'RATIO:=DX/RANGE; Y'RATIO:=DY/RANGE
  190. 1900   XMIN:=INQ(23); XMAX:=INQ(24); YMIN:=INQ(25); YMAX:=INQ(26)
  191. 1910   X'SCALE:=(INQ(20)-INQ(19))/(XMAX-XMIN)
  192. 1920   Y'SCALE:=(INQ(22)-INQ(21))/(YMAX-YMIN)
  193. 1930   X'LN:=DX*X'SCALE; Y'LN:=DY*Y'SCALE
  194. 1940   LENGTH:=╙╤╥(X'LN^2+Y'LN^2)
  195. 1950   ALPHA:=X'LN/LENGTH; BETA:=Y'LN/LENGTH
  196. 1960   I'START:=╔╬╘(START'VL); I'STOP:=╔╬╘(STOP'VL)+1
  197. 1970   ╔╞ (START'X-XMIN<XMAX-STOP'X) ╧╥ (START'Y-YMIN>YMAX-STOP'Y) ╘╚┼╬
  198. 1980     SIDE#:=+1
  199. 1990   ┼╠╙┼ 
  200. 2000     SIDE#:=-1
  201. 2010   ┼╬─╔╞ 
  202. 2020   ╞╧╥ I:=I'START ╘╧ I'STOP ─╧
  203. 2030     ╞╧╥ J:=1 ╘╧ 9 ─╧
  204. 2040       VALUE:=LOG10(J*10^I)
  205. 2050       X:=START'X+(VALUE-START'VL)*X'RATIO
  206. 2060       Y:=START'Y+(VALUE-START'VL)*Y'RATIO
  207. 2070       MOVETO(X,Y)
  208. 2080       X:=X+SIDE#*(8/X'SCALE)*BETA
  209. 2090       Y:=Y-SIDE#*(8/Y'SCALE)*ALPHA
  210. 2100       DRAWTO(X,Y)
  211. 2110       ╔╞ J=1 ╘╚┼╬
  212. 2120         BASE'CONV(VALUE,10,OUT$)
  213. 2130         ╔╞ VALUE=0 ╘╚┼╬
  214. 2140           NUMBER'SIZE:=1
  215. 2150         ┼╠╔╞ VALUE>0 ╘╚┼╬
  216. 2160           NUMBER'SIZE:=╔╬╘(LOG10(VALUE))+1
  217. 2170         ┼╠╙┼ 
  218. 2180           NUMBER'SIZE:=╔╬╘(LOG10(┴┬╙(VALUE)))+2
  219. 2190         ┼╬─╔╞ 
  220. 2200         X:=X-(4/X'SCALE)*NUMBER'SIZE*(1-SIDE#)*BETA
  221. 2210         ╔╞ DY<>0 ╘╚┼╬ X:=X-(8/X'SCALE)*ALPHA/BETA
  222. 2220         Y:=Y-(4/Y'SCALE)*(SIDE#+1)*ALPHA
  223. 2230         PLOTTEXT(X,Y,OUT$(1:MIN(NUMBER'SIZE,╠┼╬(OUT$))))
  224. 2240       ┼╬─╔╞ 
  225. 2250     ┼╬─╞╧╥ J
  226. 2260   ┼╬─╞╧╥ I
  227. 2270 ┼╬─╨╥╧├ LOG'AXIS
  228.